<?php
// 设置响应头
header('Content-Type: image/png');
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
// 开启Session
session_start();
// 设置中文字体路径（需要确保服务器上有这个字体文件）
$font = __DIR__ . '/fonts/simhei.ttf';
// 如果字体文件不存在，使用系统字体
if (!file_exists($font)) {
    $font = null;
}
// 生成随机验证码
$code = '';
$chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';
for ($i = 0; $i < 4; $i++) {
    $code .= $chars[rand(0, strlen($chars) - 1)];
}
// 存储验证码到session
$_SESSION['captcha_code'] = $code;
// 创建图像
$image = imagecreatetruecolor(120, 50);
// 设置背景色
$bgColor = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bgColor);
// 添加干扰线
for ($i = 0; $i < 5; $i++) {
    $color = imagecolorallocate($image, rand(0, 150), rand(0, 150), rand(0, 150));
    imageline($image, rand(0, 120), rand(0, 40), rand(0, 120), rand(0, 40), $color);
}
// 添加噪点
for ($i = 0; $i < 100; $i++) {
    $color = imagecolorallocate($image, rand(0, 200), rand(0, 200), rand(0, 200));
    imagesetpixel($image, rand(0, 120), rand(0, 40), $color);
}
// 添加文字
if ($font) {
    // 使用TrueType字体
    for ($i = 0; $i < 4; $i++) {
        $color = imagecolorallocate($image, rand(0, 100), rand(0, 100), rand(0, 100));
        $x = 25 + ($i * 20) + rand(-5, 5);
        $y = 25 + rand(-5, 5);
        $angle = rand(-15, 15);
        imagettftext($image, 20, $angle, $x, $y, $color, $font, $code[$i]);
    }
} else {
    // 使用内置字体
    for ($i = 0; $i < 4; $i++) {
        $color = imagecolorallocate($image, rand(0, 100), rand(0, 100), rand(0, 100));
        $x = 10 + ($i * 25);
        $y = 25 + rand(0, 10);
        imagechar($image, 5, $x, $y, $code[$i], $color);
    }
}
// 输出图像
imagepng($image);
// 释放资源
imagedestroy($image);
?>